package com.jh.rq;

/**
 * @author Li
 * @Date 2023/4/17 10:45
 */
public class ReadMe {

}
/**
 * 集合：
 *   单列集合Collection：List(数据是有序并且是可以重复的)——> 可重复：ArrayList、LinkedList
 *                     Set——>不可重复：HashSet、TreeSet
 * 双列集合Map（通过键值对存储数据，存储的数据是无序的，Key值不能重复，value值可以重复）：双列：HashMap、TreeMap
 *
 * 类型通配符：<?>
 * ArrayList<?>：表示元素类型未知的ArrayList，它的元素可以匹配任何的类型
 * 但是并不能把元素添加到ArrayListList中了，获取出来的也是父类类型
 *
 * 类型通配符上限：<? extends 类型>
 * 比如： ArrayListList <? extends Number>：它表示的类型是Number或者其子类型
 *
 * 类型通配符下限：<? super 类型>
 * 比如： ArrayListList <? super Number>：它表示的类型是Number或者其父类型
 *
 * set集合：元素不会重复存储
 *         存取顺序不一致
 *         没有带索引的方法，不能使用普通for循环遍历，也不能通过索引获取或删除set集合里的元素
 *使用iterator迭代器、增强for循环（for(String s : set){}）进行遍历
 *
 *
 *treeSet集合
 * 不包含重复元素
 * 没有带索引的方法
 * 可以将元素按照规则进行排序
 *
 * 自然排序Comparable
 * 使用空参构造创建TreeSet集合
 * 自定义的Student类实现Comparable接口
 * 重写里面的compareTo方法
 *
 * 自然排序简单原理图
 * 如果返回值为负数，表示当前存入的元素是较小值，存左边
 * 如果返回值为0，表示当前存入的元素跟集合中元素重复了，不存
 * 如果返回值为正数，表示当前存入的元素是较大值，存右边
 *
 *比较器排序Comparator：
 * TreeSet的带参构造方法使用的是比较器排序对元素进行排序的
 * 比较器排序，就是让集合构造方法接收Comparator的实现类对象，重写compare​(T o1,T o2)方法
 * 重写方法时，一定要注意排序规则必须按照要求的主要条件和次要条件来写
 *
 * HashSet集合特点
 * 底层数据结构是哈希表
 * 对集合的迭代顺序不作任何保证，也就是说不保证存储和取出的元素顺序一致
 * 没有带索引的方法，所以不能使用普通for循环遍历
 * 由于是Set集合，所以元素唯一
 *
 * 哈希表
 * JDK8之前，底层采用数组+链表实现，可以说是一个元素为链表的数组
 * JDK8以后，在长度比较长的时候，底层实现了优化
 *
 *
 * Map集合特点：
 *      双列集合，一个键对应一个值
 *      键不可以重复，值可以重复
 *      键和值是一一对应的，每一个键只能找到自己对应的值
 * （键 + 值） 这个整体 我们称之为“键值对”或者“键值对对象”，在Java中叫做“Entry对象”
 *
 * V put(K key,V value)	添加元素
 * V remove(Object key)	根据键删除键值对元素
 * void clear()	移除所有的键值对元素
 * boolean containsKey(Object key)	判断集合是否包含指定的键
 * boolean containsValue(Object value)	判断集合是否包含指定的值
 * boolean isEmpty()	判断集合是否为空
 * int size()	集合的长度，也就是集合中键值对的个数
 *
 *
 * Lambda表达式的格式
 * 格式：(形式参数) -> {代码块}
 * 形式参数：如果有多个参数，参数之间用逗号隔开；如果没有参数，留空即可
 * ->：由英文中划线和大于符号组成，固定写法。代表指向动作
 * 代码块：是我们具体要做的事情，也就是以前我们写的方法体内容
 *
 */
